/**
 * Copyright (C) cedarsoft GmbH.
 *
 * Licensed under the GNU General Public License version 3 (the "License")
 * with Classpath Exception; you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 *         http://www.cedarsoft.org/gpl3ce
 *         (GPL 3 with Classpath Exception)
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 3 only, as
 * published by the Free Software Foundation. cedarsoft GmbH designates this
 * particular file as subject to the "Classpath" exception as provided
 * by cedarsoft GmbH in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 3 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 3 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact cedarsoft GmbH, 72810 Gomaringen, Germany,
 * or visit www.cedarsoft.com if you need additional information or
 * have any questions.
 */

package com.exadel.google;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.concurrent.BlockingQueue;

public class RegistratorUI extends JDialog{

    private JPanel labelPanel;
    private JPanel inputPanel;
    private JPanel captchaPanel;
    private JTextField field;
    private JLabel picLabel;
    private JLabel status;

    private Registrator registrator;

    public RegistratorUI(Registrator registrator){
        this.registrator = registrator;
        setParameters();
        addPanels();
        addStatusLabel();
        addInputField();
        addRefreshButton();
        setVisible(true);
    }

    private void setParameters(){
        setSize(320, 320);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLocation(400, 150);
        setTitle("Registrator");
    }

    private void addPanels(){
        setLayout(new GridLayout(3, 0));
        labelPanel = new JPanel();
        captchaPanel = new JPanel();
        captchaPanel.setLayout(new FlowLayout());
        inputPanel = new JPanel();
        inputPanel.setLayout(new FlowLayout());
        add(labelPanel);
        add(captchaPanel);
        add(inputPanel);
    }

    private void addStatusLabel(){
        status = new JLabel("Welcome");
        labelPanel.add(status);
    }

    private void setStatus(String message){
        status.setText(message);
    }

    public void setPicture(URL url){
        BufferedImage myPicture;
        try {
            myPicture = ImageIO.read(url);
            picLabel.setIcon(new ImageIcon(myPicture));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void addRefreshButton(){
        JButton refresh = new JButton("Refresh");
        picLabel = new JLabel();
        captchaPanel.add(picLabel);
        captchaPanel.add(refresh);
        setPicture(registrator.getCaptcha());
        refresh.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            setPicture(registrator.refreshCaptcha());
            }
        });
    }

    private void addInputField(){
        JButton submit = new JButton("Done");
        field = new JTextField(27);
        inputPanel.add(field);
        inputPanel.add(submit);
        class SubmitListener implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                String answer = field.getText();
                field.setText("");
                setStatus("Please, wait");
                registrator.fillFields();
                if (registrator.createAccount(answer)){
                    setStatus("Account successfully created");

                    //registrator.refreshCaptcha();
                } else {
                    setStatus("Something wrong. Try again");
                }
                System.out.println("Fucking crash");
                //registrator.refreshCaptcha();
            }
        }
        field.addActionListener(new SubmitListener());
        submit.addActionListener(new SubmitListener());
    }
}

